#pragma once

extern "C" {
#include <postgres.h>
#include <fmgr.h>

#include <nodes/pg_list.h>
#include <tcop/tcopprot.h>
#include <utils/builtins.h>
}

namespace optimizer {

struct CascadesOptimizer {
  static void InitGuc();

  static void InitHooks();

  static PlannedStmt* Optimize(Query* query, const char* query_string, int cursor_options,
                               ParamListInfoData* bound_params);

  static char* TransformQuery(Query* query);
};

}  // namespace optimizer